/*
 * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package java.lang.reflect;

/**
 * WildcardType 表示通配符类型表达式，例如
 * {@code ?}、{@code ? extends Number} 或 {@code ? super Integer}。
 *
 * @since 1.5
 */
public interface WildcardType extends Type {
    /**
     * 返回表示此类型变量上界的 {@code Type} 对象数组。
     * 请注意，如果没有显式声明上界，则上界为 {@code Object}。
     *
     * <p>对于每个上界 B：
     * <ul>
     *  <li>如果 B 是参数化类型或类型变量，则创建它
     *  （有关参数化类型创建过程的详细信息，
     *  请参见 {@link java.lang.reflect.ParameterizedType ParameterizedType}）。
     *  <li>否则，解析 B。
     * </ul>
     *
     * @return 表示此类型变量上界的 Type 数组
     * @throws TypeNotPresentException 如果任何边界引用不存在的类型声明
     * @throws MalformedParameterizedTypeException 如果任何边界引用
     *     由于任何原因无法实例化的参数化类型
     */
    Type[] getUpperBounds();

    /**
     * 返回表示此类型变量下界的 {@code Type} 对象数组。
     * 请注意，如果没有显式声明下界，则下界为 {@code null} 的类型。
     * 在这种情况下，返回长度为零的数组。
     *
     * <p>对于每个下界 B：
     * <ul>
     *   <li>如果 B 是参数化类型或类型变量，则创建它
     *  （有关参数化类型创建过程的详细信息，
     *  请参见 {@link java.lang.reflect.ParameterizedType ParameterizedType}）。
     *   <li>否则，解析 B。
     * </ul>
     *
     * @return 表示此类型变量下界的 Type 数组
     * @throws TypeNotPresentException 如果任何边界引用不存在的类型声明
     * @throws MalformedParameterizedTypeException 如果任何边界引用
     *     由于任何原因无法实例化的参数化类型
     */
    Type[] getLowerBounds();
    // one or many? Up to language spec; currently only one, but this API
    // allows for generalization.
}
